package com.warom.sdg.dao;

import com.warom.sdg.model.OperationLogEntity;

import java.util.List;

/**
 * 操作日志数据访问对象接口
 * 定义操作日志表的数据库操作方法
 */
public interface OperationLogDao {
    
    /**
     * 插入操作日志记录
     * @param log 操作日志实体
     * @return 插入记录的ID
     */
    long insert(OperationLogEntity log);
    
    /**
     * 批量插入操作日志记录
     * @param logs 操作日志列表
     * @return 插入的记录数量
     */
    int insertBatch(List<OperationLogEntity> logs);
    
    /**
     * 根据ID删除操作日志
     * @param id 日志ID
     */
    void deleteById(long id);
    
    /**
     * 根据时间范围删除操作日志
     * @param startTime 开始时间戳
     * @param endTime 结束时间戳
     */
    void deleteByTimeRange(long startTime, long endTime);
    
    /**
     * 删除指定时间之前的所有日志
     * @param timestamp 时间戳
     * @return 删除的记录数
     */
    int deleteLogsBefore(long timestamp);
    
    /**
     * 获取所有操作日志
     * @return 操作日志列表
     */
    List<OperationLogEntity> getAllLogs();
    
    /**
     * 根据用户名获取操作日志
     * @param username 用户名
     * @return 操作日志列表
     */
    List<OperationLogEntity> getLogsByUsername(String username);
    
    /**
     * 根据操作类型获取操作日志
     * @param operationType 操作类型
     * @return 操作日志列表
     */
    List<OperationLogEntity> getLogsByOperationType(String operationType);
    
    /**
     * 根据操作页面获取操作日志
     * @param operationPage 操作页面
     * @return 操作日志列表
     */
    List<OperationLogEntity> getLogsByOperationPage(String operationPage);
    
    /**
     * 根据操作状态获取操作日志
     * @param operationStatus 操作状态
     * @return 操作日志列表
     */
    List<OperationLogEntity> getLogsByOperationStatus(String operationStatus);
    
    /**
     * 根据时间范围获取操作日志
     * @param startTime 开始时间戳
     * @param endTime 结束时间戳
     * @return 操作日志列表
     */
    List<OperationLogEntity> getLogsByTimeRange(long startTime, long endTime);
    
    /**
     * 分页获取操作日志
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 操作日志列表
     */
    List<OperationLogEntity> getLogsPaginated(int offset, int limit);
    
    /**
     * 根据条件分页查询操作日志
     * @param username 用户名（可为null）
     * @param operationType 操作类型（可为null）
     * @param operationPage 操作页面（可为null）
     * @param operationStatus 操作状态（可为null）
     * @param startTime 开始时间戳（可为0）
     * @param endTime 结束时间戳（可为0）
     * @param offset 偏移量
     * @param limit 限制数量
     * @return 操作日志列表
     */
    List<OperationLogEntity> getLogsByConditionsPaginated(
            String username, String operationType, String operationPage, 
            String operationStatus, long startTime, long endTime, 
            int offset, int limit);
    
    /**
     * 获取操作日志总数
     * @return 日志总数
     */
    int getLogCount();
    
    /**
     * 根据条件获取操作日志总数
     * @param username 用户名（可为null）
     * @param operationType 操作类型（可为null）
     * @param operationPage 操作页面（可为null）
     * @param operationStatus 操作状态（可为null）
     * @param startTime 开始时间戳（可为0）
     * @param endTime 结束时间戳（可为0）
     * @return 符合条件的日志总数
     */
    int getLogCountByConditions(
            String username, String operationType, String operationPage, 
            String operationStatus, long startTime, long endTime);
    
    /**
     * 清空所有操作日志
     * @return 删除的记录数
     */
    int deleteAllLogs();
    
    /**
     * 获取指定时间之后的日志数量
     * @param timestamp 时间戳
     * @return 日志数量
     */
    int getLogCountSince(long timestamp);
    
    /**
     * 根据操作状态获取日志数量
     * @param status 操作状态
     * @return 日志数量
     */
    int getLogCountByStatus(String status);
} 